/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao;

import byblos.negocio.Idioma;
import byblos.negocio.NegocioExcecao;
import byblos.negocio.reserva.Reserva;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.joda.time.DateTime;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.Out;

/**
 *
 * @author diego
 */
@Component
public class VisaNetEnviarComponent {

    @In
    private Idioma idioma;
    @In
    private HttpServletRequest request;
    @Out
    private String identificacao;
    @Out
    private String meiopag;
    @Out
    private String ambiente;
    @Out
    private String modulo;
    @Out
    private String operacao;
    @Out
    private String tid;
    @Out
    private String orderid;
    @Out
    private String order;
    @Out
    private String price;
    @Out
    private String damount;
    @Out
    private String language;

    public void enviar() {
        System.out.println(" ========== VisaNetEnviar.Enviar.Logic =============");
        fazerLogica();
        System.out.println(" ========== final do enviar() =========== ");
    }

    private void fazerLogica() {
        Map parametros = request.getParameterMap();

        Reserva reserva = (Reserva) parametros.get("reserva");

        if (reserva == null) {
            throw new NegocioExcecao("Não foi possível deinir a reserva!");
        }

        identificacao = "2046596";
        meiopag = "VISANET";
        ambiente = "producao"; //teste ou producao
        modulo = "VISAVBV";
        operacao = "Pagamento";
        order = "Dados do Cliente: " + reserva.getNomeCliente() + ", " + reserva.getEmailCliente() +
                ", " + reserva.getTelefoneCliente();
        tid = reserva.getTid();
        orderid = "" + reserva.getId();
        price = "" + reserva.getValorVisa();
        damount = reserva.getValorMoeda().toString();
        String lingua = "";
        if (idioma == Idioma.PORTUGUES) {
            lingua = "pt";
        }
        if (idioma == Idioma.ESPANHOL) {
            lingua = "es";
        }
        if (idioma == Idioma.INGLES) {
            lingua = "en";
        }
        if (idioma == Idioma.ALEMAO) {
            lingua = "en";
        }
        if (idioma == Idioma.FRANCES) {
            lingua = "en";
        }
        language = lingua;
        System.out.println(" === fazerLogica() === ");
        System.out.println(" ================= price (reserva.getValorVisa()) = " + price);
        System.out.println(" ================= orderid (reserva.getId();) = " + orderid);
        System.out.println(" ================= tid (reserva.getTid()) = " + tid);
        System.out.println(" ================= damount (reserva.getValorMoeda().toString()) = " + damount);
        System.out.println(" === fim fazerLogica() === ");
    }

    private String tid(String lojaVisa) {
        StringBuilder tidString = new StringBuilder();

        tidString.append(lojaVisa.substring(4, 9));

        DateTime d = new DateTime();
        System.out.println("loja visa formatado " + lojaVisa.substring(4, 9));
        System.out.println("ultimo digito ano " + ("" + d.getYearOfEra()).substring(3, 4));
        System.out.println("dia atual corrente " + preencherComZero(d.getDayOfYear(), 3));
        System.out.println("hora " + preencherComZero(d.getHourOfDay(), 2));
        System.out.println("minuto " + preencherComZero(d.getMinuteOfHour(), 2));
        System.out.println("segundo " + preencherComZero(d.getSecondOfMinute(), 2));
        System.out.println("decimo de segundo " + ("" + d.getMillisOfSecond()).substring(0, 1));
        System.out.println("tipo de transacao 1001");
        tidString.append(("" + d.getYearOfEra()).substring(3, 4));
        tidString.append(preencherComZero(d.getDayOfYear(), 3));
        tidString.append(preencherComZero(d.getHourOfDay(), 2));
        tidString.append(preencherComZero(d.getMinuteOfHour(), 2));
        tidString.append(preencherComZero(d.getSecondOfMinute(), 2));
        tidString.append(("" + d.getMillisOfSecond()).substring(0, 1));

        tidString.append("1001");
        System.out.println("============tid da locaweb: " + tidString.toString());
        return tidString.toString();
    }

    private String preencherComZero(int numero, int quantidadeAlgarismo) {
        String string = "" + numero;
        while (string.length() < quantidadeAlgarismo) {
            string = "0" + string;
        }
        return string;
    }
}
